<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>php学习笔记[053]</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="show"><span>053 PHP如何防止注入及开发安全</span></div>
<?php include 'include/top.php';?>
<div class="text">
<b>注入原理</b>
程序员的水平及经验也参差不齐，相当大一部分程序员在编写代码的时候，没有对用户输入数据的合法性进行判断，使应用程序存在安全隐患。用户可以提交一段数据库查询代码，根据程序返回的结果，获得某些他想得知的数据，这就是所谓的<strong>SQL Injection</strong>，即SQL注入。 受影响的系统：对输入的参数不进行检查和过滤的系统<br />
<b>注入过程</b>
正常来讲，我们通过地址接收一些必要的参数如： <strong>PHP100.php?id=2</strong>  页面中我们会使用  <strong>2</strong> 写入到SQL语句中正常情况：Select * From Table where id=2如果我们对SQL语句熟悉，就知道2 我们可以替换成我们需要的SQL语句如：<strong>and exists (select id from admin)</strong><br />
<b>防止注入的几种办法</b>
其实原来就是我们需要过滤一些我们常见的关键字和符合如：<strong>Select，insert，update，delete，and，*，</strong>等等 <br />
<div class="code"> function inject_check($sql_str) {return eregi('select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str);} // 进行过滤</div> 
或者通过<strong>Addslashes（需要被过滤的内容）</strong>过滤掉一些特殊符号<br />
<b>PHP其他地方安全设置</b>
1、<strong>register_globals</strong> = <strong>Off</strong>   设置为关闭状态<br />
2、SQL语句书写时尽量不要省略小引号和单引号<br />
<strong>Select * From Table Where id=2</strong>       (不规范)<br />
<strong>Select * From ·Table· Where ·id·='2' </strong>      (规范)<br />
3、正确的使用 <strong>$_POST $_GET $_SESSION</strong> 等接受参数，并加以过滤<br />
4、提高数据库命名技巧，对于一些重要的字段可根据程序特点命名<br />
5、对于常用方法加以封装，避免直接暴露SQL语句<br />

</div>




</body>
</html>
